/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package responsabile;

import ejb.GestioneCorsiLocal;
import ejb.GestioneSediLocal;
import ejb.GestoreTutorLocal;
import it.uninsieme.common.Utility;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;
import jpa.Corsi;
import jpa.Sede;
import jpa.Tutor;

/**
 *
 * @author Administrator
 */
@ManagedBean(name = "CorsoBean")
@RequestScoped
public class CorsoBean {

    @EJB
    GestioneCorsiLocal gcorsi;
    @EJB
    GestioneSediLocal gsedi;
    @EJB
    GestoreTutorLocal gtutor;

    private String message;
    private String sede;
    private String corso;
    private String nome;
    private String descrizione;
    private String sedeModifica;
    private String corsoModifica;
    private String nomeModifica;
    private String descrizioneModifica;
    private String corsoElimina;
    private String sedeElimina;
    private String tutorAssegna;
    private String corsoAssegna;
    private List<SelectItem> listaSedi;
    private List<SelectItem> listaCorsi;
    private List<SelectItem> listaTutor;
    private List<Corsi> corsi;
    private List<Sede> sedi;
    private List<Tutor> tutor;

    /**
     * Creates a new instance of CorsoBean
     */
    public CorsoBean() {
    }

    public String getCorsoAssegna() {
        return corsoAssegna;
    }

    public void setCorsoAssegna(String corsoAssegna) {
        this.corsoAssegna = corsoAssegna;
    }

    public Collection<SelectItem> getlistaTutor() {
        listaTutor = new ArrayList<>();
        tutor = gtutor.listaTutor();
        for (Tutor p : tutor) {
            String text = "" + p.getId() + " - " + p.getCognome() + " " + p.getNome();
            listaTutor.add(new SelectItem(p.getId(), text));
        }
        Utility.ordinaListaLabel(listaTutor);
        return Collections.unmodifiableCollection(listaTutor);
    }

    public void setlistaTutor(List<SelectItem> listaTutor) {
        this.listaTutor = listaTutor;
    }

    public String getTutorAssegna() {
        return tutorAssegna;
    }

    public void setTutorAssegna(String tutorAssegna) {
        this.tutorAssegna = tutorAssegna;
    }

    public String getSedeElimina() {
        return sedeElimina;
    }

    public void setSedeElimina(String sedeElimina) {
        this.sedeElimina = sedeElimina;
    }

    public String getCorsoElimina() {
        return corsoElimina;
    }

    public void setCorsoElimina(String corsoElimina) {
        this.corsoElimina = corsoElimina;
    }

    public String getCorsoModifica() {
        return corsoModifica;
    }

    public void setCorsoModifica(String corsoModifica) {
        this.corsoModifica = corsoModifica;
    }

    public String getDescrizioneModifica() {
        return descrizioneModifica;
    }

    public void setDescrizioneModifica(String descrizioneModifica) {
        this.descrizioneModifica = descrizioneModifica;
    }

    public String getNomeModifica() {
        return nomeModifica;
    }

    public void setNomeModifica(String nomeModifica) {
        this.nomeModifica = nomeModifica;
    }

    public String getSedeModifica() {
        return sedeModifica;
    }

    public void setSedeModifica(String sedeModifica) {
        this.sedeModifica = sedeModifica;
    }

    public String getCorso() {
        return corso;
    }

    public void setCorso(String corso) {
        this.corso = corso;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getSede() {
        return sede;
    }

    public void setSede(String sede) {
        this.sede = sede;
    }

    public Collection<Corsi> getCorsi() {
        return Collections.unmodifiableCollection(corsi);
    }

    public void setCorsi(List<Corsi> corsi) {
        this.corsi = corsi;
    }

    public Collection<SelectItem> getlistaCorsi() {
        listaCorsi = new ArrayList<>();
        corsi = gcorsi.listaCorsi();
        String[] nomi = new String[corsi.size()];
        int i = 0;
        for (Corsi p : corsi) {
            nomi[i] = p.getNome() + " - tenuto nella Sede:" + p.getSedeid();
            listaCorsi.add(new SelectItem(p.getId(), nomi[i]));
            i++;
        }
        Utility.ordinaListaLabel(listaCorsi);
        return Collections.unmodifiableCollection(listaCorsi);
    }

    public void setlistaCorsi(List<SelectItem> listaCorsi) {
        this.listaCorsi = listaCorsi;
    }

    public Collection<SelectItem> getlistaSedi() {
        listaSedi = new ArrayList<>();
        sedi = gsedi.listaSedi();
        for (Sede p : sedi) {
            String text = "Sede:" + p.getId() + " - " + p.getCitta() + ", Via " + p.getVia();
            listaSedi.add(new SelectItem(p.getId(), text));
        }
        Utility.ordinaListaLabel(listaSedi);
        return Collections.unmodifiableCollection(listaSedi);
    }

    public void setlistaSedi(List<SelectItem> listaSedi) {
        this.listaSedi = listaSedi;
    }

    public String getDescrizione() {
        return descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String registra() {
        Corsi nuovo = new Corsi();
        nuovo.setNome(nome);
        nuovo.setDescr(descrizione);
        try {
            nuovo.setSedeid(new Integer(sede));
        } catch (NumberFormatException nfe) {
            message = "Non ci sono sedi a cui aggiungere corsi";
            return "errore";
        }
        if (nome.isEmpty() || descrizione.isEmpty()) {
            message = "Devi completare i campi Nome e Descrizione per Creare un Corso";
            return "errore";
        }
        boolean reg = gcorsi.registra(nuovo);
        if (!reg) {
            Sede s = gsedi.getSede(new Integer(sede));
            message = "Corso '" + nome + "' già presente nella sede di " + s.getCitta() + " di Via " + s.getVia();
            return "errore";
        }
        Sede s = gsedi.getSede(new Integer(sede));
        message = "Il corso '" + nome + "' è stato creato nella sede di " + s.getCitta() + " di Via " + s.getVia();
        return "GestioneCorsi";
    }

    public String modifica() {
        Corsi nuovo = new Corsi(), vecchio = new Corsi();
        try {
            vecchio.setId(new Integer(corsoModifica));
        } catch (NumberFormatException nfe) {
            message = "Non ci sono corsi da Modificare";
            return "errore";
        }
        nuovo.setId(new Integer(corsoModifica));
        nuovo.setNome(nomeModifica);
        nuovo.setDescr(descrizioneModifica);
        nuovo.setSedeid(new Integer(sedeModifica));
        if (nomeModifica.isEmpty() || descrizioneModifica.isEmpty()) {
            message = "Devi completare i campi Nome e Descrizione per Modificare un Corso";
            return "errore";
        }
        boolean reg = gcorsi.modifica(vecchio, nuovo);
        if (!reg) {
            message = "Il corso non si trova nella sede di " + gsedi.getSede(new Integer(sedeModifica)).getCitta()
                    + " oppure esiste un corso con lo stesso nome.";
            return "errore";
        }
        message = "Il corso è stato modificato in " + nomeModifica;
        return "GestioneCorsi";
    }

    public String elimina() {
        boolean reg = false;
        try {
            reg = gcorsi.elimina(new Integer(corsoElimina), new Integer(sedeElimina));
        } catch (NumberFormatException nfe) {
            message = "Non ci sono corsi da Eliminare";
            return "errore";
        }
        if (!reg) {
            message = "Il corso non è stato eliminato";
            return "errore";
        }
        message = "Il corso è stato eliminato";
        return "GestioneCorsi";
    }

    public String assegna() {
        boolean reg = false;
        try {
            reg = gtutor.assegna(new Integer(tutorAssegna), new Integer(corsoAssegna));
        } catch (NumberFormatException nfe) {
            message = "Non ci sono corsi da assegnare o tutor";
            return "errore";
        }
        if (!reg) {
            message = "Il corso non è stato assegnato";
            return "errore";
        }
        message = "Assegnamento corso effettuato";
        return "GestioneCorsi";
    }

}
